www.gusucode.com > VC++ 编写软件自动升级服务源代码 > VC++ 编写软件自动升级服务源代码/gusucode/updater_src0.8.1.6/Proxy.cpp
/******************************************************************** created: 2005/12/04 created: 4:12:2005 23:00 filename: Proxy.cpp file path: Updater file base: Proxy file ext: cpp author: Geert van Horrik purpose: *********************************************************************/ //********************************************************************* // INCLUDES //********************************************************************* #include "stdafx.h" #include "Updater.h" #include "Proxy.h" #include "ProxyInfo.h" #include <wininet.h> #include <afxinet.h> //********************************************************************* // INITIALISATION //********************************************************************* std::auto_ptr<CProxy> CProxy::sm_inst; //********************************************************************* // CONSTRUCTOR & DESTRUCTOR //********************************************************************* CProxy::CProxy() { // Set default values m_iProxyType = PROXY_AUTODETECT; m_sManualHttp = ""; m_sManualFtp = ""; m_sAutoConfigURL = ""; } //********************************************************************* // PUBLIC FUNCTIONS //********************************************************************* CProxy * CProxy::Instance() { if (sm_inst.get() == 0) sm_inst = auto_ptr<CProxy>(new CProxy); return sm_inst.get(); /* FOLLOWING CODE WORKS ONLY IN VC7 if(sm_inst.get() == 0) sm_inst.reset(new CProxy); return sm_inst.get(); */ } //===================================================================== bool CProxy::GetProxyInfo(CString sURL, ProxyData * pProxyInfo) { // Check which type to use switch (m_iProxyType) { case PROXY_DIRECTCONNECTION: return GetDirectConnection(sURL, pProxyInfo); case PROXY_AUTODETECT: return GetAutoDetect(sURL, pProxyInfo); case PROXY_MANUAL: return GetManual(sURL, pProxyInfo); case PROXY_AUTOCONFIGURL: return GetAutomaticConfigURL(sURL, pProxyInfo); default: // Auto detect return GetAutoDetect(sURL, pProxyInfo); } } //===================================================================== void CProxy::SetType(int iProxyType) { // Set value m_iProxyType = iProxyType; } //===================================================================== void CProxy::SetManualServers(CString sHttp, CString sFtp) { // Set value m_sManualHttp = sHttp; m_sManualFtp = sFtp; } //===================================================================== void CProxy::SetAutoConfigURL(CString sURL) { // Set value m_sAutoConfigURL = sURL; } //********************************************************************* // PRIVATE FUNCTIONS //********************************************************************* bool CProxy::GetDirectConnection(CString sURL, ProxyData * pProxyInfo) { // Set direct connection pProxyInfo->dwAccessType = INTERNET_OPEN_TYPE_DIRECT; pProxyInfo->sProxyName = ""; pProxyInfo->sProxyBypass = ""; // We always succeed return true; } //===================================================================== bool CProxy::GetAutoDetect(CString sURL, ProxyData * pProxyInfo) { // Auto detect settings return CProxyInfo::GetProxyInfo(sURL, pProxyInfo); } //===================================================================== bool CProxy::GetManual(CString sURL, ProxyData * pProxyInfo) { // Declare variables CString sServer, sObject; INTERNET_PORT nPort; DWORD dwServiceType; // Try to parse URL AfxParseURL(sURL, dwServiceType, sServer, sObject, nPort); // Always use proxy type pProxyInfo->dwAccessType = INTERNET_OPEN_TYPE_PROXY; // Use right manual proxy server switch (dwServiceType) { case AFX_INET_SERVICE_HTTP: pProxyInfo->sProxyName = m_sManualHttp; pProxyInfo->sProxyBypass = m_sManualHttp; break; case AFX_INET_SERVICE_FTP: pProxyInfo->sProxyName = m_sManualFtp; pProxyInfo->sProxyBypass = m_sManualFtp; break; default: // Use HTTP pProxyInfo->sProxyName = m_sManualHttp; pProxyInfo->sProxyBypass = m_sManualHttp; break; } // We have succeeded return true; } //===================================================================== bool CProxy::GetAutomaticConfigURL(CString sURL, ProxyData * pProxyInfo) { /* NOT IMPLEMENTED YET */ return GetAutoDetect(sURL, pProxyInfo); }